# 业务逻辑
# python基础70% 40分钟写出来 优秀    1小时  良好    1个半小时 及格    不超过3个报错
# 1先听懂 全部写成文字信息
# 2根据文字信息开始写
# 购物车
# 个人信息
# 字典
# 导入time模块
import time
user_dic = {
    'name':'大海',
    'password':123,
    'locked':False,
    'account':50000,
    'shopping_cart':{}
}
# 登录
def login():
    '''
    登录函数，密码输入错误3次锁定5秒，用户名输入错误可以一直输入
    :return:
    '''
    print('请登录')
    count= 0
    while True:
        # 'locked':False,一开始是非锁定的
        if user_dic['locked']:
            print('你已经输入错误3次,系统锁定5秒，请等待5秒后再登录')
            time.sleep(5)
            user_dic['locked'] = False
            count = 0
        name = input('输入用户名').strip()
        if name == user_dic['name']:
            pwd = int(input('输入密码').strip())
            if user_dic['password'] == pwd and user_dic['locked']==False:
                print('登录成功')
                break
            else:
                print('密码错误')
                count+=1
        else:
            print('用户名不存在')
        if count >=3:
            user_dic['locked']=True
# login()
def login_intter(func):
    # shopping
    def wrapper():
        login()
        func()
    return wrapper



# 购物功能
@login_intter
def shopping():
    print('购物')
    goods_list = [
        ['coffee',30],
        ['chicken',20],
        ['iPhone',10000],
        ['car',100000],
        ['building',200000],

    ]
    shopping_cart = {}
    cost_money = 0
    while True:
        # print(goods_list)
        # enumerate 枚举
        for i ,item in enumerate(goods_list):
            print(i,item)
            # i就是列表的索引
            # item就是列表的元素
        # 输入时候 输入名字
        # 输入商品对应的编号
        choice = input('输入商品对应的编号，按t键结账').strip()
        # input输入的是数字吗？字符串的数字
        if choice.isdigit():
            # 判断字符串是否是数字
            # 进入了这个里面，字符串的数字
            choice = int(choice)
            if choice < 0 or choice >= len(goods_list):
                # 判断数字对应列表的索引没在列表索引的范围内
                print('请选择相应的序号')
                continue
            # 完美的数字0到列表的长度
            goods_name = goods_list[choice][0]
            goods_price = goods_list[choice][1]
            # print(goods_name)
            # print(goods_price)
            if user_dic['account'] >= goods_price:
                # 用户的账户的钱 要大于商品的价格
                # 成员运算 if in
                if goods_name in shopping_cart:
                    shopping_cart[goods_name]['count'] +=1
                else:
                    shopping_cart[goods_name]={'price':goods_price,'count':1}
                # print(shopping_cart)
                # 账户的金额 = 账户的金额 - 商品的价格
                user_dic['account'] -= goods_price
                # 花费的金额 =  花费的金额(一开始是0) + 商品的价格
                cost_money += goods_price
                # 提示用户这一次你加入购物车的商品名字
                print('%s 新的购物商品'%goods_name)
            else:
                # 用户的账户的钱 要大于商品的价格，否则钱不够
                print('钱不够')
        elif choice == 't':
            print(shopping_cart)
            buy = input('买不买(y/n)>>>').strip()
            if buy == 'y':
                if cost_money ==0:
                    print('不买，白看呢')
                    break
                user_dic['shopping_cart'] = shopping_cart
                print('%s 花费了%s 购买了%s'%(user_dic['name'],cost_money,shopping_cart))
                print('账户信息%s'%user_dic)
                break
            else:
                print('不买')
                break
        else:
            print('非法输入')

# 先登录才购物
shopping()

# 异常处理